//
//  IWxChatMgtLogin.h
//  WxSdk
//
//  Created by fusuwei on 14-9-9.
//  Copyright (c) 2014年 网信金融集团. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "EWxChatMgrLoginDelegate.h"



@interface IWxChatMgrLogin : NSObject

+ (IWxChatMgrLogin *)sharedInstance;


/*!
 @method
 @brief      注册一个监听对象到监听列表中
 @discussion 把监听对象添加到监听列表中准备接收相应的事件
 @param      delegate 需要注册的监听对象
 @param      appId  应用Id
 @param      secret 应用密码
 @result     成功：@"OK"    失败：**参数为空
 */
- (NSString *)registDelegate:(id<EWxChatMgrLoginDelegate>)delegate appId:(NSString *)appId secret:(NSString *)secret;


/*!
 @method
 @brief      从监听列表中移除一个监听对象
 @discussion 把监听对象从监听列表中移除,取消接收相应的事件
 @param      delegate 需要移除的监听对象
 @result
 */
- (void)unregistDelegate:(id<EWxChatMgrLoginDelegate>)delegate;


/*!
 @method
 @brief      在聊天服务器上创建账号
 @discussion 异步方法
 @param      userid 用户名id
 @param      password 密码
 @result     设置代理返回 registerNewAccountRspState:username:password:
 */
- (void)registerNewAccount:(NSString *)userid password:(NSString *)password;

/*!
 @method
 @brief      登录成功后上传设备devicetoken到聊天服务器
 @discussion 异步方法
 @param      deviceToken 设备Token
 @result     设置代理返回 uploadDeviceTokenRspState:
 */
- (BOOL)uploadDeviceToken:(NSData *)deviceToken;

/*!
 @method
 @brief      使用用户名密码登录聊天服务器
 @discussion 异步方法
 @param      userId 用户名Id
 @param      password 密码
 @result     设置代理返回 loginWithUserIdRspState:loginInfo:
 */
- (void)loginWithUserId:(NSString *)userId password:(NSString *)password;


/*!
 @method
 @brief      异步方法, 使用用户名密码登录聊天服务器
 @discussion
 @param      userId 用户名Id
 @param      password 密码
 @param      completion 回调
 @param      aQueue 回调时的线程
 @result
 */
typedef void (^completionBlock)(NSDictionary *loginInfo, EWxLoginRegState state);
- (void)asyncLoginWithUserId:(NSString *)userId
                      password:(NSString *)password
                    completion:(void (^)(NSDictionary *loginInfo, EWxLoginRegState state))completion
                       onQueue:(dispatch_queue_t)aQueue;



/*!
 @method
 @brief      同步方法, 获取是否已经登录
 @result     返回BOOL    YES 成功； NO 失败；
 */
- (BOOL)isLoginSuccess;


/*!
 @method
 @brief      异步方法, 注销当前登录用户
 @discussion 在注销过程中, 回调会被触发
 @result
 */
- (void)loginoff;



@end
